package top.fengyulou.common;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.ObjectUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * 用户工具
 */
public class UserUtils {
    //获取登录用户
    //获取登录用户id
    //验证用户是否登录
    //获取登录用户密码
    //获取登录用户密码随机串
    //制作用户密码
    //制作用户默认密码
    //根据用户密码和用户密码随机串制作密码（验证旧密码是否正确时使用）
    //用户登录
    //用户退出登录

    /**
     * 当前登录用户
     */
    public static final String LOGIN_USER = "loginUser";
    /**
     * 用户默认密码
     */
    public static final String DEF_PWD = "666666";

    /**
     * 获取登录用户
     *
     * @return
     */
    public static JSONObject getUser(HttpServletRequest request) {
        HttpSession session = request.getSession();
        String json = (String) session.getAttribute(LOGIN_USER);
        if (ObjectUtils.isNotEmpty(json)) {
            return JSONObject.parseObject(json);
        }
        return null;
    }

    /**
     * 获取登录用户id
     *
     * @return
     */
    public static Long getUserId(HttpServletRequest request) {
        JSONObject user = getUser(request);
        if (ObjectUtils.isNotEmpty(user)) {
            return user.getLong("id");
        }
        return null;
    }

    /**
     * 验证用户是否登录
     *
     * @return
     */
    public static boolean isLogin(HttpServletRequest request) {
        //获取用户数据
        JSONObject user = getUser(request);
        if (ObjectUtils.isNotEmpty(user)) {
            return true;
        }
        return false;
    }

    /**
     * 获取登录用户密码
     *
     * @return
     */
    public static String getUserPwd(HttpServletRequest request) {
        //获取用户数据
        JSONObject user = getUser(request);
        if (ObjectUtils.isNotEmpty(user)) {
            return user.getString("password");
        }
        return null;
    }

    /**
     * 获取登录用户密码随机串
     *
     * @param request
     * @return
     */
    public static String getPwdRandomStr(HttpServletRequest request) {
        //获取用户数据
        JSONObject user = getUser(request);
        if (ObjectUtils.isNotEmpty(user)) {
            return user.getString("randomStr");
        }
        return null;
    }

    /**
     * 制作用户密码
     *
     * @param pwd
     * @return
     */
    public static String[] getPwd(String pwd) {
        String randomStr = RandomUtil.randomString(5);
        return new String[]{SecureUtil.md5(pwd + randomStr), randomStr};
    }

    /**
     * 制作用户默认密码
     *
     * @return
     */
    public static String[] getPwd() {
        String randomStr = RandomUtil.randomString(5);
        return new String[]{SecureUtil.md5(SecureUtil.md5(DEF_PWD) + randomStr), randomStr};
    }

    /**
     * 根据用户密码和用户密码随机串制作密码（验证旧密码是否正确时使用）
     *
     * @param pwd
     * @param randomStr
     * @return
     */
    public static String getPwd(String pwd, String randomStr) {
        return SecureUtil.md5(pwd + randomStr);
    }

    /**
     * 用户登录
     */
    public static void login(HttpServletRequest request, Object user) {
        HttpSession session = request.getSession();
        session.setAttribute(LOGIN_USER, JSONObject.toJSONString(user));
    }

    /**
     * 用户退出登录
     */
    public static void exit(HttpServletRequest request) {
        HttpSession session = request.getSession();
        session.removeAttribute(LOGIN_USER);
    }

    public static void main(String[] args) {
        String[] pwd = getPwd();
        System.out.println(pwd[0] + " ======= " + pwd[1]);
    }
}
